import { Message } from "element-ui";
import { textToVideo, userProupdate, composeCharacterMouth } from "@/api/virtualhuman";
//计算
export function jsoncomputer(json, int) {
    let user = json.character
    let ppt = json.scene
    user.width = Modtwo(user.width, int)
    user.height = Modtwo(user.height, int)
    user.X = Modtwo(user.X, int)
    user.Y = Modtwo(user.Y, int)
    ppt.pptWidth = Modtwo(ppt.pptWidth, int)
    ppt.pptHeight = Modtwo(ppt.pptHeight, int)
    ppt.pptX = Modtwo(ppt.pptX, int)
    ppt.pptY = Modtwo(ppt.pptY, int)
    json.ppt.pages.forEach(item => {
        if (item.textureList.length > 0) {
            item.textureList.forEach(emt => {
                emt.width = Modtwo(emt.width, int)
                emt.height = Modtwo(emt.height, int)
                emt.x = Modtwo(emt.x, int)
                emt.y = Modtwo(emt.y, int)
            })
        }
    })
    return json
}
//能被二整除
function Modtwo(num, int) {
    return (num * int) % 2 === 0
        ? num * int
        : Math.ceil(num * int) % 2 === 0
            ? Math.ceil(num * int)
            : Math.ceil(num * int) - 1;
}
//判断音色，如果全选语音就不用判断，如果有一页是文字就得选音色
function istts(json) {
    let isppt = json.ppt.pages.every((item) => {
        return item.istts == 1
    })
    if (isppt) {
        return true
    } else {
        if (json.character.voiceName) {
            return true
        } else {
            return false
        }
    }
}
//判断ppt
export function jsisokppt(json) {
    if (!json.character.staticImg) {
        //人物
        Message.error("人物未选择");
        return false
    } else if (!istts(json)) {
        //音色
        Message.error("音色未选择");
        return false
    } else if (!json.scene.icon) {
        //背景图
        Message.error("背景图片未选择");
        return false
    } else if (!json.ppt.name) {
        //选择ppt
        Message.error("ppt未选择");
        return false
    } else if (textonehundred(json.ppt.pages)) {
        return true
    }
}
//判断（不判断ppt）
export function jsisok(json) {
    if (!json.character.staticImg) {
        //人物
        Message.error("人物未选择");
        return false
    } else if (istts(json)) {
        //音色
        Message.error("音色未选择");
        return false
    } else if (!json.scene.icon) {
        //背景图
        Message.error("背景图片未选择");
        return false
    } else if (textonehundred(json.ppt.pages)) {
        return true
    }
}
//判断每一页不大于300个字
function textonehundred(pages) {
    return pages.every((element, index) => {
        //ppt文本
        if (element.text.length > 300) {
            Message.error(`第${index + 1}页的ppt文字未保存或大于300字`);
            return false;
        } else {
            return true;
        }
    })
}
//判断每一页不少于10个子，或者没上传音频
export function isttsten(pages) {
    return pages.every((element, index) => {
        //ppt文本
        if (element.istts == 1) {
            if (!element.tts) {
                Message.error(
                    `第${index + 1}页未上传音频`
                );
                return false;
            } else {
                return true;
            }
        } else if (element.istts == 2) {
            if (!element.text || element.text.length < 10) {
                Message.error(
                    `第${index + 1}页未保存或文字少于10个字`
                );
                return false;
            } else {
                return true;
            }
        }
    })
}
//合成外层语音
export function pageslist(json) {
    let isppt = 0
    return new Promise((res, rej) => {
        json.ppt.pages.forEach(async (element, index) => {
            if (element.istts == 2) {
                isppt++
                textToVideo({
                    uuid: json.uuid - 0,
                    sampleRate: 1600,
                    voice: json.character.voiceName,
                    textList: [element.text],
                    index: index + 1,
                    opt: 1,
                }).then(ress => {
                    if (ress.code === 200) {
                        isppt--
                        element.tts = ress.data[0].Video;
                        element.text = ress.data[0].text;
                        if (isppt === 0) {
                            res(json)
                        }
                    } else {
                        rej(ress)
                    }
                })
            }
        })
    })
}
//合成内层语音 
export function pageslistchils(json) {
    let isgo = 0;
    return new Promise((res, rej) => {
        json.ppt.pages.forEach((ezelements) => {
            if (ezelements.istts == 2) {
                if (ezelements.childList.length > 0) {
                    isgo++;
                }
            }
        });
        if (isgo === 0) {
            res(json)
        }
        json.ppt.pages.forEach(async (ezelements, ezindex) => {
            if (ezelements.istts == 2) {
                if (ezelements.childList.length > 0) {
                    let arr = [];
                    ezelements.childList.forEach((item) => {
                        arr.push(item.ttsText);
                    });
                    await textToVideo({
                        uuid: json.uuid - 0,
                        sampleRate: 1600,
                        voice: json.character.voiceName,
                        textList: arr,
                        index: ezindex + 1,
                        opt: 3,
                    })
                        .then((ttsres) => {
                            if (ttsres.code === 200) {
                                ttsres.data.forEach((item, iidexs) => {
                                    ezelements.childList[iidexs].tts = item.Video;
                                    ezelements.childList[iidexs].ttsText = item.text;
                                });
                                isgo--;
                                if (isgo === 0) {
                                    res(json)
                                }
                            } else {
                                rej(ttsres)
                            }
                        })
                        .catch((ttserr) => {
                            rej(ttserr)
                        });
                }
            }
        })
    })
}
//提交并且保存json和发起请求
export function updateup(json) {
    return new Promise((res, rej) => {
        userProupdate({
            //提交json
            projectId: json.uuid - 0,
            userProjectInfo: json,
            original: 2
        }).then((ress) => {
            if (ress.code === 200) {
                //用户提交嘴型(合成视频)
                composeCharacterMouth({
                    projectId: json.uuid - 0,
                }).then((resss) => {
                    if (resss.code === 200) {
                        res(resss)
                    } else {
                        rej(resss)
                    }
                }).catch(err => {
                    rej(err)
                })
            } else {
                rej(ress)
            }
        }).catch(err => {
            rej(err)
        })
    })
}